// 456. 132 模式

function find132pattern(nums: number[]): boolean {
  const length = nums.length;
  // 单调栈
  const stack: number[] = [];
  // 用于比较
  // Number.MIN_VALUE 最接近0
  let k = Number.MIN_SAFE_INTEGER;
  // 逆序遍历
  for (let i = length - 1; i >= 0; --i) {
    // console.log(-3<Number.MIN_VALUE)
    if (nums[i] < k) {
      // console.log(nums[i],k);
      return true;
    }

    // js nums[-1]并不是最后一位
    // 第二圈的时候 因为当前栈顶元素小于当前遍历元素 栈顶出栈 当前元素入栈
    while (stack.length && stack[stack.length - 1] < nums[i]) {
      k = Math.max(k, stack.pop());
      // 前面已经判断？第一圈k=2
      // k = stack.pop();
    }

    // 存入栈
    // 1、第一次遍历入栈 2
    // 2、保存k之后 栈顶4
    // 因为是单调栈
    // 所以只要栈内存在元素 就能保证大于前一个元素{k} 所以最前面的判定条件是当当前nums[i]<k时即可凑成132
    stack.push(nums[i]);
    // console.log(stack);
  }
  console.log(stack);
  return false;
}

const nums18 = [1, 2, 3, 4],
  nums19 = [1, 0, 1, -4, -3];

console.log(find132pattern(nums19));
